ETH官方钱包

前往
大廳
主題

IEnumerable<T>與yield break範例

Yang | 2022-09-18 11:17:38 | 巴幣 10 | 人氣 507

光看文字說明很難理解IEnumerable<T>、yield break、yield return的使用方式,這裡紀錄相關程式碼範例和單元測試,幫助理解與記憶


//利用指定分隔符號分隔字串(輸入空白字串則不處理),再按原來順序回傳
static IEnumerable<string> SplitWithoutWhiteSpace(this string obj, params char[] separator)
{
    if (string.IsNullOrWhiteSpace(obj))
    {
        yield break;
    }

    foreach (string cell in obj.Split(separator))
    {
        yield return cell;
    }
}

//利用指定分隔符號去掉重複字串,再排序後依序回傳
static IEnumerable<string> ForeachSortedSet(this string obj, params char[] separator)
{
    if (string.IsNullOrWhiteSpace(obj))
    {
        yield break;
    }

    foreach (string cell in new SortedSet<string>(obj.Split(separator)))
    {
        yield return cell;
    }
}

//利用指定分隔符號去掉重複字串,再排序並串連成為不重複字串
static string JoinSortedSet(this string obj, in char joinSeparator, params char[] setSeparator)
{
    return setSeparator.Length <= 0 ? string.Join(joinSeparator.ToString(), obj.ForeachSortedSet(joinSeparator)) : string.Join(joinSeparator.ToString(), obj.ForeachSortedSet(setSeparator));
}

單元測試:
"".JoinSortedSet(','); //空字串
""
" ".JoinSortedSet(','); //1個空白
""
"  ".JoinSortedSet(','); //2個空白
""
"1".JoinSortedSet(',');
"1"
" 1 ".JoinSortedSet(',');
" 1 "
" 1 , 2 ".JoinSortedSet(',');
" 1 , 2 "
" 2, 1 , 2 ".JoinSortedSet(','); //排序測試
" 1 , 2, 2 "
" 2 , 1 , 2 ".JoinSortedSet(','); //排序及不重複測試
" 1 , 2 "
" 3 , 2 , 1 , 2 ".JoinSortedSet(','); //排序及不重複測試
" 1 , 2 , 3 "
" 3 , 2 , 1 , 3 , 2 ".JoinSortedSet(','); //排序及不重複測試
" 1 , 2 , 3 "

單元測試正常

實務上有其他字串處理需求時,也能再調整或擴充SplitWithoutWhiteSpace、ForeachSortedSet、JoinSortedSet
送禮物贊助創作者 !
0
留言

創作回應

更多創作