Files
HLib/InBox/SheetFilterUxer.cs
2026-06-01 13:23:34 +09:00

73 lines
2.5 KiB
C#

using KssSmaPlaLib.Commons;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KssSmaPlaLib.InBox
{
public class SheetFilterUxer : IFilterUxer<string>
{
private readonly HashSet<string> includedSheets;
private readonly HashSet<string> excludedSheets;
public SheetFilterUxer(IEnumerable<string> included, IEnumerable<string> excluded)
{
includedSheets = new HashSet<string>(included ?? Enumerable.Empty<string>());
excludedSheets = new HashSet<string>(excluded ?? Enumerable.Empty<string>());
}
public IEnumerable<string> ApplyFilter(IEnumerable<string> sheetNames)
{
if (includedSheets.Any())
{
// Included優先 → lineNamesの中でincludedに含まれるものだけ返す
//return sheetNames.Where(name => includedSheets.Contains(name));
// ワイルドカード(*)ありとする!
List<string> listA = new List<string>();
foreach (var name in sheetNames)
{
foreach (var iName in includedSheets)
{
if (StringUxer.WildcardMatch(name, iName))
{
listA.Add(name);
break;
}
}
}
return listA;
}
// Excluded適用 → lineNamesの中でexcludedに含まれないものだけ返す
//return sheetNames.Where(name => !excludedSheets.Contains(name));
// ワイルドカード(*)ありとする!
List<string> listB = new List<string>();
foreach (var name in sheetNames)
{
var isMatch = false;
foreach (var eName in excludedSheets)
{
if (StringUxer.WildcardMatch(name, eName))
{
isMatch = true;
break;
}
}
if (!isMatch) listB.Add(name);
}
return listB;
}
public bool CanPass(string sheetName)
{
return HasAnyPass(new[] { sheetName });
}
public bool HasAnyPass(IEnumerable<string> sheetNames)
{
return ApplyFilter(sheetNames).Any();
}
}
}