C# - 搜索特定数组

时间:2015-05-21 13:54:52

标签: c# arrays list

我正在尝试找到解决方案的不同值组合。如果值(在双数组中)通过测试我想将它们添加到列表中,只要它们不在列表中。

如果列表包含值为[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语句只执行一次,然后再不执行。

2 个答案:

答案 0 :(得分: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

正如我所料。

答案 1 :(得分: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来决定如何处理数组。