C# 字符串列表包含所有子组件的名称

C# 字符串列表包含所有子组件的名称,c#,C#,字符串列表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++) {

字符串列表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;
                    }
                }
            }
        }
    }
for(int i=0;i
更新:


搜索词的顺序很重要。

为了保持匹配集的顺序,您需要计算每个字符串,并跟踪您在匹配中的位置

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;
        }
    }
}
string[]G=new[]
{
"1,2,5",
"1,2,4,5,6",
"2,4,6",
"1,4,6"
};
字符串搜索=“1,4”;
var searchNumbers=search.Split(',).Select(int.Parse.ToList();
对于(int i=0;i
将单个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;
bool passs=false;
对于(int i=0;i
这消除了匹配“10”或“41”等的可能性 它也不会在意你的元素是否被排序,即使你说它们被排序了。它也会匹配,不管列表中“1”和“4”之间的条目数是多少


您可以对其进行调整,以便在符合条件之前获取您想要匹配的任意数量的输入,如果您想这样做,我将把它留给您。

@Amin排序是否重要?例如,字符串{“4,5,1”}匹配?OP希望覆盖contains函数,以便如果字符串中的任何位置都有1和4,则答案应该为TRUE,而不是字符串“1,4”,而是更像([^0-9]|^)[1.4]([^0-9]|$)是
G[n]
只是一个字符串?请阅读:@Ryan S,是的,很重要,数组始终处于有序状态。如果您有时间,也必须阅读=>@Ryan S,我更新了问题。但仍然收到错误。错误是:“System.FormatException:'输入字符串的格式不正确。”,foreach
(数值中的变量)
@CodeNotFound,你能帮我一下吗???@Amin代码是正确的。检查这个演示=>你能给我们看看你的G数组的内容吗?@CodeNotFound,G如上所述,
string search
是{“1,2”,“1,4”,“2,4”,“2,5”,…}您不需要使用
if\else
进行拆分,您只需拆分,如果
不存在,您将得到一个包含一项的数组。1和4是一个示例。我想提供一个在字符串列表中搜索字符串数组的结构