[英]C# Array of strings contains string part from another array of strings
有沒有辦法使用 LINQ 來查找一個字符串數組中的字符串是否包含另一個字符串數組中的(部分)字符串? 像這樣的東西:
string[] fullStrings = { "full_xxx_part_name", "full_ccc_part_name", "full_zzz_part_name" };
string[] stringParts = { "a_part", "b_part", "c_part", "e_part" };
// compare fullStrings array with stringParts array
// full_ccc_part_name contains c_part (first match is OK, no need to find all)
// return index 1 (index 1 from fullStrings array)
這是為了教育目的而提出的。 我知道 Linq 不會神奇地避免循環,而是在后台執行。
您可以將Where
+ Any
與字符串方法一起使用:
string[] matches = fullStrings
.Where(s => stringParts.Any(s.Contains))
.ToArray();
如果您想以不區分大小寫的方式進行比較,請使用IndexOf
:
string[] matches = fullStrings
.Where(s => stringParts.Any(part => s.IndexOf(part, StringComparison.OrdinalIgnoreCase) >= 0))
.ToArray();
如果您想要索引:
int[] matches = fullStrings
.Select((s, index) => (String: s, Index: index))
.Where(x => stringParts.Any(x.String.Contains))
.Select(x => x.Index)
.ToArray();
您當然需要使用某種類型的循環來查找索引。 這是使用 Linq 的解決方案。 如果找到匹配項,這將返回第一個索引,如果沒有找到匹配項,則返回 -1:
var index = fullStrings
.Select((s,i) => (s, i))
.Where(x => stringParts.Any(x.s.Contains))
.Select(x => x.i)
.DefaultIfEmpty(-1)
.First();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.