我不明白为什么我在下面的Where
子句中得到它。为什么我在这里得到IndexOutOfRangeException?
using System;
using System.Linq;
public static class Extensions
{
/// <summary>
/// Removes consecutive characters,
/// e.g. "aaabcc" --> "abc"
/// </summary>
public static void RemoveDuplicates(this string s)
{
var arr = s.ToCharArray()
.Where((i,c) => (i > 0) ? (c != s[i - 1]) : true)
.ToArray();
s = new string(arr);
}
}
public class Program
{
public static void Main()
{
var str = "aaabcc";
str.RemoveDuplicates();
Console.WriteLine(str);
}
}
此外,有没有办法让这个稍微更有效率和紧凑,同时仍然使用LINQ?
我认为这是另一种方式,第一个元素是char,第二个是索引。所以把'(i,c)切换到(c,i)' –