Возвращение результата If-Else Независимо от заказа If-Else? - PullRequest
0 голосов
/ 30 мая 2018

Если бы у меня был следующий код:

string x = "123";
string y = "abc";

if (stringVar.Contains(x))
{
    return x;
}
else if (stringVar.Contains(y))
{
    return y;
}

, где

string stringVar = "123abc";

, это было бы

return x;

Однако

stringVar = "abc123";

будет также

return x;

Есть ли способ, где вместо следования предопределенному порядку оператора if-else я мог бы получить возвращаемый результат на основе порядка stringVar вместо этого?

Мой желаемый результат: if:

stringVar = "123abc";
...
return x;

и if:

stringVar = "abc123";
...
return y;

EDIT:

Этот пример является очень упрощенным примером моей текущей проблемы, String.StartsWith () не всегда работает, так как искомый текст не всегда находится в начале stringVar.Кроме того, в моей настоящей проблеме нет четких разделителей между словами (то есть без пробелов), что также затрудняет разбиение stringVar.

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Вот не-Linq способ сделать это.

var subStrings = new[] {"abc", "123"};
string result = null;
int position = stringVar.Length;
foreach(var sub in subStrings)
{
    var currPos = stringVar.IndexOf(sub);
    if(currPos > -1 && currPos < position)
    {
        position = currPos;
        result = sub;
    }
}

return result;
0 голосов
/ 30 мая 2018

попробуй string.IndexOf().он возвращает первый индекс подстроки else, -1

, затем вы можете вернуться в зависимости от того, какое число меньше.

"abc123".indexOf("abc") = 0
"abc123".indexOf("123") = 3
0 голосов
/ 30 мая 2018

Поместите строки поиска в массив, вычислите IndexOf и выберите самое раннее совпадение:

var searchStrings = new[] {"abc", "123"};
var res = searchStrings.Select(s => new { // Pair up a string with its index in stringVar
    Value = s
,   Index = stringVar.IndexOf(s)
})
.Where(p => p.Index >= 0)                 // Remove strings that did not produce a match
.OrderBy(p => p.Index)                    // Order by the match position
.FirstOrDefault(p => p.Value);            // Pick the earliest one
0 голосов
/ 30 мая 2018

Сначала я бы предложил сохранить элементы в коллекции, например:

string[] words = {"123","abc"};

Теперь вы можете использовать string.IndexOf и LINQ:

return words
    .Where(stringVar.Contains)
    .OrderBy(stringVar.IndexOf)
    .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...