检查列表中的字符串数组包含来自另一个列表的字符串,反之亦然

时间:2017-07-25 21:31:04

标签: c# linq

使用linq有一个简单的方法吗?

我想检查并返回true或false,list1中的任何字符串是否包含array1中的字符串。在下面的例子中,这将是string2value,我想返回true。

同样,我想检查是否有任何array1包含list1中的字符串。这将是string1blah,因此也将返回true。谢谢!

List<string> list1 = new List<string>{"string1","string2value"};

string[] array1 = new string[2] {"string1blah","string2"};

我有几个版本,但它不能一直运行。

array1.ToList().Any(a=>list1.Contains(a))
list1.Any(l=>array1.ToList().Contains(l))

5 个答案:

答案 0 :(得分:8)

你可以试试这个:

var result= list1.Where(s=>array1.Any(s1=>s.Contains(s1)));

根据list1中的每个字符串,您会看到array1字符串中是否包含s中的元素。

答案 1 :(得分:1)

你的问题的措辞方式很难理解你的想法。

如果您希望一个列表中的所有字符串都是另一个列表中元素的子字符串,那么这应该有效:

var substrings = myList.Where(bigstring => myArray.Any(substring => bigstring.Contains(substring)));

如果您只想知道这样的元素是否存在,那么请执行以下操作:

bool myCondition = myList.Any(bigstring => myArray.Any(substring => bigstring.Contains(substring)));

答案 2 :(得分:1)

如果你想要漂亮的linq,你可以这样做:

    static void Main(string[] args)
    {

        var list1 = new List<string> { "string1", "string2value" };
        var array1 = new string[] { "string1blah", "string2" };

        var result = from sl in list1
                     from sa in array1
                     where sl.Contains(sa) || sa.Contains(sl)
                     select new { sl, sa };

        foreach (var x in result)
        {
            Console.WriteLine(x);
        }
    }

这给出了很好的输出

{ sl = string1, sa = string1blah }
{ sl = string2value, sa = string2 }

答案 3 :(得分:1)

如果需要,您还可以使用linq查询表达式。

提供此代码:

Unhandled error for request POST /api/org.example.mynetwork.Trader: Error: error trying to query chaincode. Error: Error executing chaincode: Failed to execute transaction (Timeout expired while executing transaction)
at channel.queryByChaincode.then.catch (/home/ubuntu/composer/my-network/node_modules/composer-connector-hlfv1/lib/hlfconnection.js:758:34)

Unhandled error for request POST /api/org.example.mynetwork.Commodity: Error: error trying to query chaincode. Error: Error executing chaincode: premature execution - chaincode (my-network:0.9.2) is being launched
at channel.queryByChaincode.then.catch (/home/ubuntu/composer/my-network/node_modules/composer-connector-hlfv1/lib/hlfconnection.js:758:34)
  

我想检查并返回true或false,list1中的任何字符串是否包含array1中的字符串。在下面的例子中,这将是string2value,我想返回true。

你可以这样做:

List<string> list1 = new List<string> { "string1", "string2value" };
string[] array1 = new string[2] { "string1blah", "string2" };
  

同样,我想检查是否有任何array1包含list1中的字符串。这将是string1blah,因此也将返回true。谢谢!

你可以修改上面的内容来实现它:

var result = from l1 in list1
             from a1 in array1
             where l1.Contains(a1)
             select l1; // Or select true if you want to just return true

答案 4 :(得分:0)

要返回true或false(正如您在OP注释中提到的那样),您将修改调用以计算包含的项目,如果大于0,则返回true。

编辑感谢Dax Fohl

var list1 = new List<string> {"Test1", "Test2", "Test3", "Test4"};
var array1 = new string[] {"Test3", "Test4", "Test5", "Test6"};

var result = list1.Any(s => array1.Any(s.Contains));