#c# #string
#c# #строка
Вопрос:
Я ищу, есть ли лучший способ выяснить, какой из двух символов появляется первым в строке.
мой текущий код для этого таков
string UserInput = Console.Readline; char FirstFound; if (UserInput.IndexOf(' ') gt; UserInput.IndexOf('-') ) { FirstFound = ' '; } else { FirstFound = '-'; }
Есть ли метод, который допускает более 1 ввода, чтобы упростить это? Или что-нибудь еще, чтобы сделать это короче?
Комментарии:
1. Короче, чем это, нет. Но если у вас больше символов, вы можете перебирать символ за символом
2. Говоря «более 1 ввода», вы имеете в виду, что у вас их более одного
UserInput
?3. @PranavHosangadi нет, я спрашивал, есть ли какой-либо способ найти индекс первого экземпляра 2 или более элементов в строке.
Ответ №1:
Вы можете немного сократить его, поняв, что код фактически содержит -
символ в качестве значения по умолчанию, потому что это результат else
блока. Имея это в виду, мы можем сделать это, чтобы удалить else
блок:
string UserInput = Console.Readline(); char FirstFound = '-'; if (UserInput.IndexOf(' ') gt; UserInput.IndexOf('-') ) { FirstFound = ' '; }
Мы также могли бы сделать это, что не короче, но будет работать лучше:
string UserInput = Console.ReadLine(); char FirstFound; foreach(char c in UserInput) { if (c == ' ' || c == '-') { FirstFound = c; break; } }
Который мы можем сократить, чтобы использовать метод linq FirstOrDefault()
:
string UserInput = Console.ReadLine(); char FirstFound = UserInput.FirstOrDefault(c =gt; "- ".Contains(c));
Если вы хотите расширить это, чтобы разрешить более двух целей поиска, вы можете добавить цели в строку следующим образом, без дополнительных строк кода:
string UserInput = Console.ReadLine(); char FirstFound = UserInput.FirstOrDefault(c =gt; "- */x÷".Contains(c));
Комментарии:
1. Альтернативная версия:
char FirstFound = UserInput.FirstOrDefault(c =gt; "- ".Contains(c));
2. О, мне это нравится. Не возражаете, если я украду его здесь?
3. Действуйте, сэр! Я поместил это в качестве комментария в ваш ответ. 😉