将在一个函数中创建的字符串值作为参数传递给函数

本文关键字:函数 字符串 参数传递 创建 一个 | 更新日期: 2023-09-27 18:24:43

我有一个名为ValidColumns的函数,完成后将包含一个由管道字符"|"连接的id值字符串。

private bool ValidColumns(string[] curGlobalAttr, int LineCount)
{
    //test to see if there is more than 1 empty sku mod field in the imported file
    string SkuMod = GetValue(curGlobalAttr, (int)GlobalAttrCols.SKU);
    if(SkuMod =="") 
        ids += string.Join("|", OptionId);
 }

我想做的是获取id字符串,并将其作为引用传递给另一个函数,以检查它是否包含重复值:

protected bool CheckForDuplicates(ref string ids)
{
    bool NoDupes = true;
    string[] idSet = ids.Split('|');
    for (int i = 1; i <= idSet.Length - 1; i++)
    {
        if (idSet[i].ToString() == idSet[i - 1].ToString()) { NoDupes = false; }
    }
    return NoDupes;
}

但我不知道该怎么做才好?这看起来很容易,但我觉得我要做得比它需要的要困难得多。

将在一个函数中创建的字符串值作为参数传递给函数

if (idSet[i].ToString() == idSet[i - 1].ToString())

您只将每个值与以前的值进行检查。如果对值进行排序,这将起作用,但更简单的方法是获得一个不同的列表并检查长度:

return (idSet.Length == idSet.Distinct().Count());

D Stanley答案的第二部分是您想要

public bool CheckForDuplicates(string value)
{
  string[] split = value.Split('|');
  return split.Length != split.Distinct().ToArray().Length;
}

您需要一个嵌套循环来完成此操作,它将查看每个项目并将其与另一个项目进行比较。这也将消除对它本身的检查,这样它就不会总是返回false。

在这篇文章中,我们将跟踪我们已经检查过的内容,然后只将新项目与项目进行比较,然后慢慢缩小第二个循环的大小,以消除重复检查。

bool noDupes = true;
int currentItem = 0;
int counter = 0;
string[] idSet = ids.Split('|');
while(currentItem < idSet.Count)
{
    counter = currentItem + 1;
    while(counter < idSet.Count)
    {
        if(idSet[currentItem].ToUpper() == idSet[counter].ToUpper())
        {
            noDupes = false;
            return noDupes;
        }
        counter ++;
    }
    currentItem ++;
}
return noDupes;

编辑:

有人指出,我发布的一个选项作为答案总是会返回false,所以我删除了该选项,并调整了该选项以使其更健壮,更容易逻辑地执行。

希望这有帮助:)