2014-09-26 77 views
0

我有一个名为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; 
} 

但我不知道如何正确地做?这似乎很容易,但我觉得我要做到这一点比它需要更难。

+1

什么为什么你试图通过引用传递它,你的代码有什么问题,你在这里用? – Servy 2014-09-26 14:57:51

+1

备注 - 由于您不是在更改原始字符串,因此您不需要传递参考。 – 2014-09-26 14:57:51

+0

如果我是你,我会在第一个函数中执行'Join'之前检查重复项。它可以节省你不得不重新分裂的步骤来检查双倍。 – ps2goat 2014-09-26 14:58:00

回答

0

d斯坦利的回答的第二部分是你想要

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

我喜欢这个想法,但问题仍然存在 - 我如何将来自ValidColumns的ids值传入此函数?只有在有效列完成之后,我才能将所有值存储在ID字符串中.... – 2014-09-26 17:34:56

+0

@ gallifrey1212您将您在ValidColumns函数中构建的字符串中的有效ID传入。然后你用这种方法检查列表中不同项目的数量是否相同,列表中的项目数量是多少......这似乎是你所请求的一切...... – DotN3TDev 2014-09-29 20:46:52

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

你只是检查对以前各个值。这将工作,如果值排序,但更简单的方法也只是得到一个不同的列表,并检查长度:

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

你需要一个嵌套循环要做到这一点,这将看看每个项目,并进行比较到另一个项目。这也将消除检查它本身,所以它并不总是返回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,所以我删除的选项,并调整该选项是更强大,更容易步逻辑。

希望这有助于:)

+0

选项1将始终返回false。 – 2014-09-26 15:23:30

+0

@MikeStockdale哇,我觉得愚蠢你是绝对正确的我会从我的答案中删除它...感谢捕捉... ... – DotN3TDev 2014-09-26 15:25:56

相关问题