概要
文字列リストに新しい要素を追加する際「末尾に連番をつけて追加したい」という単純だけど、ありがちな要件の実装例です。
メインロジックの中にこうした処理を直接書いていくと、コードが膨らんでしまうために外出ししてみました。
番号が歯抜けになっていない事を前提としたコードです。
実装
Unique.cs
using System.Collections.Generic;
using System.Linq;
namespace Implem.Libraries.Utilities
{
public static class Unique
{
// リスト中に存在しない名前+連番の文字列を作成する関数
public static string New(IEnumerable<string> existing, string name, int start = 1)
{
var number = start;
while(existing.Any(o => o == name + number))
{
number++;
}
return name + number;
}
}
}
Program.cs
using Implem.Libraries.Utilities;
using System;
using System.Collections.Generic;
namespace Implem.CodeDefiner
{
internal class Program
{
// 関数の使用例
static void Main(string[] args)
{
// 連番で 1, 2 が存在するリスト
var items = new List<string> { "設定1", "設定2" };
// リストに連番 3, 4, 5 を追加したい場合の使用例
items.Add(Unique.New(items, "設定"));
items.Add(Unique.New(items, "設定"));
items.Add(Unique.New(items, "設定"));
// 内容を出力
foreach(var item in items)
{
Console.WriteLine(item);
}
}
}
}
結果
設定1
設定2
設定3
設定4
設定5