C# 替换通用列表中的所有元音
C# Replace All Vowels in Generic List
如何用 space 替换列表中的所有元音?以下代码似乎不起作用。
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
string vowels = "a e i o u y";
Instruments.ForEach(w=>vowels = vowels.Replace(w,""));
预期结果:
cll
gtr
vln
如果需要更改集合中的值,您应该使用 .Select:
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
var regex = new Regex("^a|e|i|o|u", RegexOptions.IgnoreCase);
var withoutVowels = from instr in Instruments
select regex.Replace(instr, string.Empty);
foreach (var item in withoutVowels)
{
Console.WriteLine(item);
}
试试这个
var vowels = new List<char> {'a','e','i','o','u','y'};
var result = new List<string>();
Instruments.ForEach(w => result.Add(new string(w.Select(x => vowels.Any(y => y == x) ? ' ' : x).ToArray())));
有点快和脏,但这对我有用。
List<string> Instruments = new List<string>();
var newList = new List<String>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
List<string> vowels = new List<string> { "a", "e", "i", "o", "u", "y" };
Instruments.ForEach(w =>
{
var temp = w;
vowels.ForEach(v =>
{
temp = temp.Replace(v, "");
});
newList.Add(temp);
});
newList.ForEach(w => Console.WriteLine(w));
Instruments
中有 string
或单词的集合。您的 .ForEach
遍历该集合,其中每个实例都是 w
,但是您在这里使用 .Replace
不会影响这些实例,您是在操作中使用它们来影响字符串 vowels
.
请参阅 String.Replace MSN 文档。
因此,您还需要遍历 vowels
string
,并使用 vowels
的 char
实例:w.Replace(v, " ")
,其中 w
是 Instruments
中的单词实例, v
是 vowels
中的元音实例:
所以,应该是Instruments.ForEach(w => foreach (vowelChar in vowels.split(" ")) { w.Replace(vowelChar, " "); });
注意:@mjwills 在评论中指出了此操作的另一个问题。对 w
的分配不会在这里持续存在。所以,你需要以某种方式创建新的 List<string>
来持久化它(要么事先声明它并在迭代中添加它,要么使用 Linq .ToList<T>
IEnumerable<T>
的扩展。
但是,这是低效的,因为您实际上是在 Instruments
的每次迭代中使用 .Split
从 vowels
string
创建一个 char[]
。 =44=]
相反,您应该将 vowels
定义为 char[]
以避免该操作的必要性:var vowels = new char[] {'a','e','i','o','u', 'y'};
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
char[] vowels = new char[] {'a','e','i','o','u','y'};
Instruments.ForEach(w => {
foreach (char v in vowels) {
w = w.Replace(v, ' ');
}
});
编辑:在迭代中分配给 Instruments
的 w
个实例不会持续存在,因此您需要为结果创建一个 List<string>
的新实例。
List<string> results = new List<string>();
Instruments.ForEach(w => {
foreach (char v in vowels) {
results.Add(w.Replace(v, ' '));
}
});
results.ForEach(w => Console.WriteLine(w));
您可以尝试使用 Regex 进行同样的操作:
public void ReplaceAllVowels()
{
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
var pattern = new Regex("[aeiouy]");
var lst = Instruments.Select(i => pattern.Replace(i, "")).ToList();
foreach (var item in lst)
{
Console.WriteLine(item);
}
}
这很适合我:
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
string vowels = "aeiouy";
var results = vowels.Aggregate(Instruments,
(i, v) => i.Select(x => x.Replace(v.ToString(), "")).ToList());
我得到:
cll
gtr
vln
dbl bss
如何用 space 替换列表中的所有元音?以下代码似乎不起作用。
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
string vowels = "a e i o u y";
Instruments.ForEach(w=>vowels = vowels.Replace(w,""));
预期结果:
cll
gtr
vln
如果需要更改集合中的值,您应该使用 .Select:
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
var regex = new Regex("^a|e|i|o|u", RegexOptions.IgnoreCase);
var withoutVowels = from instr in Instruments
select regex.Replace(instr, string.Empty);
foreach (var item in withoutVowels)
{
Console.WriteLine(item);
}
试试这个
var vowels = new List<char> {'a','e','i','o','u','y'};
var result = new List<string>();
Instruments.ForEach(w => result.Add(new string(w.Select(x => vowels.Any(y => y == x) ? ' ' : x).ToArray())));
有点快和脏,但这对我有用。
List<string> Instruments = new List<string>();
var newList = new List<String>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
List<string> vowels = new List<string> { "a", "e", "i", "o", "u", "y" };
Instruments.ForEach(w =>
{
var temp = w;
vowels.ForEach(v =>
{
temp = temp.Replace(v, "");
});
newList.Add(temp);
});
newList.ForEach(w => Console.WriteLine(w));
Instruments
中有 string
或单词的集合。您的 .ForEach
遍历该集合,其中每个实例都是 w
,但是您在这里使用 .Replace
不会影响这些实例,您是在操作中使用它们来影响字符串 vowels
.
请参阅 String.Replace MSN 文档。
因此,您还需要遍历 vowels
string
,并使用 vowels
的 char
实例:w.Replace(v, " ")
,其中 w
是 Instruments
中的单词实例, v
是 vowels
中的元音实例:
所以,应该是Instruments.ForEach(w => foreach (vowelChar in vowels.split(" ")) { w.Replace(vowelChar, " "); });
注意:@mjwills 在评论中指出了此操作的另一个问题。对 w
的分配不会在这里持续存在。所以,你需要以某种方式创建新的 List<string>
来持久化它(要么事先声明它并在迭代中添加它,要么使用 Linq .ToList<T>
IEnumerable<T>
的扩展。
但是,这是低效的,因为您实际上是在 Instruments
的每次迭代中使用 .Split
从 vowels
string
创建一个 char[]
。 =44=]
相反,您应该将 vowels
定义为 char[]
以避免该操作的必要性:var vowels = new char[] {'a','e','i','o','u', 'y'};
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
char[] vowels = new char[] {'a','e','i','o','u','y'};
Instruments.ForEach(w => {
foreach (char v in vowels) {
w = w.Replace(v, ' ');
}
});
编辑:在迭代中分配给 Instruments
的 w
个实例不会持续存在,因此您需要为结果创建一个 List<string>
的新实例。
List<string> results = new List<string>();
Instruments.ForEach(w => {
foreach (char v in vowels) {
results.Add(w.Replace(v, ' '));
}
});
results.ForEach(w => Console.WriteLine(w));
您可以尝试使用 Regex 进行同样的操作:
public void ReplaceAllVowels()
{
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
var pattern = new Regex("[aeiouy]");
var lst = Instruments.Select(i => pattern.Replace(i, "")).ToList();
foreach (var item in lst)
{
Console.WriteLine(item);
}
}
这很适合我:
List<string> Instruments = new List<string>();
Instruments.Add("cello");
Instruments.Add("guitar");
Instruments.Add("violin");
Instruments.Add("double bass");
string vowels = "aeiouy";
var results = vowels.Aggregate(Instruments,
(i, v) => i.Select(x => x.Replace(v.ToString(), "")).ToList());
我得到:
cll gtr vln dbl bss