字符串列表G是:
[0] : {"1,2,5"}
[1] : {"1,2,4,5,6"}
[2] : {"2,4,6"}
[3] : {"1,4,6"}
通过以下命令,我们得出结论:列表G [3]中存在"1,4"
:
if (G[i].Contains("1,4")) { //code here }
如何修改上述命令,除了功能(包含),列表G [1]中存在"1,4"
?
程序代码
for (int i = 0; i < candid.Count; i++)
{
foreach (TransactionTP b in transactions)
{
string search = candid[i];
var searchNumbers = search.Split(',').Select(int.Parse).ToList();
for (int j = 0; j < G.Count; j++)
{
IEnumerable<int> numbers = G[j].Split(',').Select(int.Parse);
int idx = 0;
foreach (var number in numbers)
{
if (number == searchNumbers[idx])
{
idx++;
}
if (idx == searchNumbers.Count)
{
arraye[i] = arraye[i] + (b.transactionUtility);
break;
}
}
}
}
}
更新
搜索词的顺序很重要。
答案 0 :(得分:1)
为了保持你匹配的集合的顺序go(在这种情况下是4,1),你需要评估每个字符串,跟踪你在匹配中的位置。
string[] G = new[]
{
"1,2,5",
"1,2,4,5,6",
"2,4,6",
"1,4,6"
};
string search = "1,4";
var searchNumbers = search.Split(',').Select(int.Parse).ToList();
for (int i = 0; i < G.Length; i++)
{
// Convert the string into an enumeration of numbers
IEnumerable<int> numbers = G[i].Split(',').Select(int.Parse);
// Index to keep track of the search
int idx = 0;
// Loop through the input set sequentially
foreach (var number in numbers)
{
// Check if the input matches the next expected number
if (number == searchNumbers[idx])
{
idx++;
}
if (idx == searchNumbers.Count)
{
Console.WriteLine("String {0} matched", G[i]);
break;
}
}
}
答案 1 :(得分:1)
使用执行此操作的方法替换您的单个Contains调用:
bool passes = false;
for(int i = 0; i < G.Length; i++)
{
List<string> temp = new List<string>();
if(G[i].Contains(","))
{
temp = G[i].Split(",");
}
else
{
temp = G[i];
}
if(temp.Contains("1") && temp.Contains("4")
{
passes = true;
}
}
return passes;
这消除了匹配&#34; 10&#34;或&#34; 41&#34;等等 它也不关心你的元素是否被排序,即使你说它们是。无论&#34; 1&#34;之间的条目数如何,它也将匹配。和&#34; 4&#34;在列表中。
你可以在满足匹配作为匹配之前接受任意数量的输入,如果你想这样做,我会把它留给你。