Как увеличить регистр конкретной буквы в массиве C#
Уважаемые C# не злитесь пожалуйста за такие вопросы, меня просто интересует как увеличить конкретную букву в массиве? Моя попытка это сделать на JS
let a=["asov", "syz", "io", "fpz"];
x=a.map(re=>{arr=[...re];
try{
arr[2]=arr[2].toUpperCase(); return arr.join('')} catch {
console.log("Erroz");
}
})
console.log(x.join(' '))
Ответы (2 шт):
Автор решения: XelaNimed
→ Ссылка
Не претендую на истину в последней инстанции, т.к. в Linq не силён, но Вашу проблему решает:
int idx = 2;
var items = new string[]{
"abc", "abcdefg", "hi", null, ""
};
var newItems = items
.Where(x => (x?.Length ?? -1) > idx)
.Select(y => y.Substring(0, idx) +
char.ToUpper(y[idx]) +
(y.Length > idx + 1 ? y.Substring(idx + 1) : "")
);
/* Более "читабельный" вариант
var newItems = new List<string>();
foreach(string item in items)
{
if (!string.IsNullOrWhiteSpace(item) && item.Length > idx)
{
string res = item.Substring(0, idx);
res += char.ToUpper(item[idx]);
if (item.Length > idx + 1)
{
res += item.Substring(idx + 1);
}
newItems.Add(res);
}
}
*/
string str = string.Join(", ", newItems);
Console.WriteLine(str);
// abC, abCdefg
"Поиграться" можно здесь.
Автор решения: Andrei Khotko
→ Ссылка
Как бы я это сделал не через LINQ, с помощью StringBuilder:
private static string[] MakeCapitalLetterForAllStringsInArrayAtIndex(string[] items, int index)
{
if (items == null)
{
return null;
}
if (index < 0)
{
var itemsCopy = new string[items.Length];
items.CopyTo(itemsCopy, 0);
return itemsCopy;
}
var newItems = new string[items.Length];
for (var i = 0; i < items.Length; i++)
{
newItems[i] = MakeCapitalLetterAtIndex(items[i], index);
}
// Либо вместо цикла
// var newItems = items.Select(i => MakeCapitalLetterAtIndex(i, index)).ToArray();
return newItems;
}
private static string MakeCapitalLetterAtIndex(string item, int index)
{
if (item == null)
{
return null;
}
var sb = new StringBuilder(item);
if (index < sb.Length)
{
sb[index] = char.ToUpper(sb[index]);
}
return sb.ToString();
}
Пример в использования в консоли:
static void Main(string[] args)
{
var items = new string[] { "asov", "syz", string.Empty, "io", null, "fpz"};
const int index = 1;
PrintStringArray(items, "Before: ");
var newItems = MakeCapitalLetterForAllStringsInArrayAtIndex(items, index);
PrintStringArray(newItems, "After: ");
;
}
private static void PrintStringArray(string[] items, string title)
{
Console.WriteLine($"==============={title}==============================");
foreach (var item in items)
{
Console.WriteLine(item);
}
Console.WriteLine("======================================================");
}