2015-05-21 2 views
0

Я пытаюсь найти различные комбинации значений, которые будут решать решение. Если значения (в двойном массиве) проходят тест, я хочу добавить их в список, если они еще не включены в список.C# - Поиск списка массивов для определенного массива

Если список содержит массив со значениями [1, 2, 3, 4, 5], и я проверяю, содержит ли список массив [5, 4, 3, 2, 1] List.Contains возвращает true. Нужно ли искать список массивов, где порядок массива имеет значение?

Я пробовал List.Any (array.SequencyEqual), но это похоже на ту же проблему.

if(!myList.Any(a => a.SequenceEqual(myArray))) 
{ 
    //some code to print array values 
    myList.Add(myArray); 
} 

Этот оператор if выполняет true один раз, а затем никогда больше.

+0

Если заказ имеет значение, вы ищете перестановки, а не комбинации. – Jodrell

+0

@Jodrell Это не похоже на комбинаторика. – Rawling

+2

'SequenceEqual', как следует из названия, проверяет конкретный заказ. Покажите нам код, который вы использовали, который не работает, и объясните, каков ваш ожидаемый результат. –

ответ

4

Я боюсь, что вы ошибаетесь, run this simple test program

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Test 
{ 
    public static void Main() 
    { 
     var list = new List<double[]> 
      { 
       new[] { 1.0, 2.0, 3.0, 4.0, 5.0 } 
      }; 
     Console.WriteLine(
      list.Any(a => a.SequenceEqual(new[] { 5.0, 4.0, 3.0, 2.0, 1.0 }))); 
     Console.WriteLine(
      list.Any(a => a.SequenceEqual(new[] { 1.0, 2.0, 3.0, 4.0, 5.0 }))); 
    } 
} 

эта программа выводит

False 
True 

, как я бы ожидать.

+0

@ Mike159 показать * все * код в вашем вопросе, необходимый для воспроизведения вашей проблемы. Пока вы этого не сделаете, любая предлагаемая помощь основана на предположениях и предположениях. –

+0

@ Mike159 Я заинтересован, чтобы согласиться. Тем не менее, это не очевидно, что именно не так, пока мы не увидим его перед нами. – Jodrell

+0

Невозможно получить его для форматирования. Я добавил свой код для части SequenceEqual в моем вопросе orignal. – MikeS159

0

Там, наверное, необычный способ сделать это в LINQ, но вот по старинке ...

List<int[]> list = new List<int[]>(); 
int[] array1 = new int[]{ 1, 2, 3, 4, 5 }; 
int[] array2 = new int[]{ 5, 4, 3, 2, 1 }; 
list.Add(array1); 
// add other arrays to list 
bool found = false; 
foreach (int[] other in list) 
{ 
    bool isMatch = true; 
    if (array2.Length == other.Length) 
    { 
     for (int i = 0; i < array2.Length; i++) 
     { 
      if (array2[i] != other[i]) 
      { 
       isMatch = false; 
       break; 
      } 
     } 
    } 
    else 
    { 
     isMatch = false; 
    } 

    if (isMatch) 
    { 
     found = true; 
     break; 
    } 
} 

Теперь используйте found, чтобы решить, что делать с массивом.

Смежные вопросы