我想删除逗号分隔的重复字符串值,如:
String str = "2,4,3,12,25,2,4,3,6,2,2,2";
我希望输出如下:
String str1 = "6,2";
请告诉我如何做到这一点我自己但我无法解决这个问题
答案 0 :(得分:10)
与Linq一起疯狂骑行。可能有更好的方法,但这是我能想到的第一个。
string str = "2,4,3,12,25,2,4,3,6,2,2,2";
List<string> uniques = str.Split(',').Reverse().Distinct().Take(2).Reverse().ToList();
string newStr = string.Join(",", uniques);
Console.WriteLine(newStr);
答案 1 :(得分:0)
您可以使用.Distinct()
扩展方法。
String str = "2,4,3,12,25,2,4,3,6,2,2,2";
var oldArray=str.Split(',').Reverse();
var collectionWithDistinctElements = oldArray.Distinct().ToArray();
var reverse=collectionWithDistinctElements.Reverse();
//take two element
var twoElements=reverse.ToList().Take(2);
//last join them
var resultArray=string.Join(",", twoElements);
答案 2 :(得分:0)
这是一个建议:
string item = "";
var lastTwoUnique= str.Split(',') //split the string on ,
//now, take the next element from the array as long as it's
//not equal to the previous element (which we store in item)
.Where((st) => st==item ? false : (item = st) == item) //** see comment below
.Reverse() //reverse collection
.Take(2) //take two (two last)
.Reverse() //reverse back
.ToList(); //make it a list
var answer = string.Join(",", lastTwoUnique);
此解决方案可保持数据完好无损,因此如果您希望存储唯一列表,则可以对该列表执行许多查询。例如,使用Distinct()
的解决方案不会在列表中每次出现2次。
此解决方案具有:Where
的中间结果(2,4,3,12,25,2,4,3,6,2
之后)。虽然不同,但是:2,4,3,12,25,6
** .Where((st) => st==item ? false : (item = st) == item)
行似乎很奇怪,所以让我解释一下:
Where
接受一个lambda函数,该函数对应该采用的项返回true,对于应该忽略的项则返回false。因此st
将成为Split
中的每个子字符串。
现在,我们来研究实际的功能:
st==item //is this st equal to the previous item?
? false //then return false
: (item = st) == item //if it's not equal, then assign `item` to the current `st`
//and compare that to item and get `true`
答案 3 :(得分:0)
非常基本但适用于您的情况
String str = "2,4,3,12,25,2,4,3,6,2,2,2";
String[] arr = str.Split(',');
String penultimate = "";
String ultimate = "";
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] != ultimate)
{
penultimate = ultimate;
ultimate = arr[i];
}
}
Console.WriteLine("{0},{1}", penultimate, ultimate);
答案 4 :(得分:0)
我试图保持相当简单的另一种解决方案:
String str = "2,4,3,12,25,2,4,3,6,2,2,2";
var holder = new string[2];
foreach (var x in str.Split(','))
{
if(holder.Last() != x)
{
holder[0] = holder[1];
holder[1] = x;
}
}
var result = string.Join(",", holder);
这将迭代逗号分隔的项目,始终保留holder
中最后看到的两个不同项目。
答案 5 :(得分:0)
String str = "2,4,3,12,25,2,4,3,6,2,2,2";
string str = s1;
var uniques = str.Split(',').Reverse().Distinct().Take(3).Reverse().Take(2).ToList();
string newStr = string.Join(",", uniques.ToArray());
这将给我正确的输出,即我想要的3,6。
感谢所有给我答案的伙伴。
答案 6 :(得分:-1)
这肯定会起作用
string str = "2,4,3,12,25,2,4,3,6,2,2,2";
List<string> uniques = new List<string>()
uniques = str.Split(',').Reverse().Distinct().Take(2).Reverse().ToList();
string newStr = string.Join(",", uniques);