Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-使用LINQ对另一个数组中的数组项进行索引_C#_Arrays_Linq_Substring - Fatal编程技术网

c#-使用LINQ对另一个数组中的数组项进行索引

c#-使用LINQ对另一个数组中的数组项进行索引,c#,arrays,linq,substring,C#,Arrays,Linq,Substring,我有一个字符串数组: string[] stringArray = {"aaa", "bbb", "ccc", "aaa", "ccc", "ddd"}; 我想获取此数组的所有索引,其中这些字符串的子字符串位于另一个数组中: string[] searchArray = {"a","b"}; 我想得到的答案是: index = {0,1,3}; searchArray中仅一个条目的解析为: List<int> index = stringArray.Select((s, i)

我有一个字符串数组:

string[] stringArray = {"aaa", "bbb", "ccc", "aaa", "ccc", "ddd"};
我想获取此数组的所有索引,其中这些字符串的子字符串位于另一个数组中:

string[] searchArray = {"a","b"};
我想得到的答案是:

index = {0,1,3};
searchArray中仅一个条目的解析为:

List<int> index = stringArray.Select((s, i) => new { i, s })
            .Where(t => t.s.Contains(searchArray[1]))
            .Select(t => t.i)
            .ToList();
List<int> index = new List<int>();
foreach (string str in searchArray)
            index.AddRange(stringArray.Select((s, i) => new { i, s })
            .Where(t => t.s.Contains(str))
            .Select(t => t.i)
            .ToList());
index.Sort();
List index=stringArray.Select((s,i)=>new{i,s})
。其中(t=>t.s.Contains(searchArray[1]))
.选择(t=>t.i)
.ToList();
所有条目的解决方案如下:

List<int> index = stringArray.Select((s, i) => new { i, s })
            .Where(t => t.s.Contains(searchArray[1]))
            .Select(t => t.i)
            .ToList();
List<int> index = new List<int>();
foreach (string str in searchArray)
            index.AddRange(stringArray.Select((s, i) => new { i, s })
            .Where(t => t.s.Contains(str))
            .Select(t => t.i)
            .ToList());
index.Sort();
列表索引=新列表();
foreach(searchArray中的字符串str)
AddRange(stringArray.Select((s,i)=>new{i,s})
其中(t=>t.s.Contains(str))
.选择(t=>t.i)
.ToList());
index.Sort();

但是出于好奇,在LINQ中只使用一个命令有什么解决方案吗?

是的,您只需要
any
来查看数组元素中是否包含“any”目标字符串:

List<int> index = stringArray
    .Select((Value, Index) => new { Value, Index })
    .Where(pair => searchArray.Any(target => pair.Value.Contains(target)))
    .Select(pair => pair.Index)
    .ToList();
List index=stringArray
.Select((值,索引)=>new{Value,Index})
.Where(pair=>searchArray.Any(target=>pair.Value.Contains(target)))
.Select(pair=>pair.Index)
.ToList();

这个代码是谁编写的?是的,我会这样做吗?No@Eser当前位置如果不说你不喜欢它的什么,那就没什么用了。有什么问题吗?你最好的解决方案是什么?它是一个O(n*n)算法。(如果我们包括
value.Contains(目标)
O(n**3))。现在已经太迟了,但我会想到一个…@Eser:鉴于一个数组的每个元素都需要与另一个数组的每个元素进行检查,并且不能使用哈希使其成为O(n+m),因为它是一个包含条件,而不是相等条件,我不明白如何避免它成为O(n*m)检查。我不会说这不是你如何做到的,如果你没有至少一些合理清晰的想法,你将如何做到。我还要指出,没有迹象表明OP实际上会有大量数据。即使有更有效的方法,也几乎肯定会更复杂。过早的优化和所有这些…我也不确定,但我会尝试使用一些类似的方法,在线性时间内预印。(顺便说一句:你更新了你的评论,并使之无效:()