我有一个.csv
文件(Book1.csv
),包括有限状态机的转换:
q_src,eve,q_dst
q0,sig1,q1
q1,sig2,q2
我需要编写一个方法来查找转换的结果。
State FindDestination(State q0, Event s0)
{
var transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));
State newq = from t in transitions
where t.q_src ==q0 && t.eve == s0
select new t.q_dst;
return newq;
}
但它效率不高,因为该方法每次都会为每次转换读取文件:
现在,如果我尝试读取文件一次并将其内容传递给方法,我就不会了
现在我应该在方法的参数中使用什么类型的transitions
:
var transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));
State FindDestination(State q0, Event s0, ? transitions) //?type
{
State newq = from t in transitions
where t.q_src ==q0 && t.eve == s0
select new t.q_dst;
return newq;
}
此外,State
和Event
类只有一个属性Name
。
我读过粗略的提示是使用IEnumerable<?>
,但?
文件的.csv
类型是什么?
答案 0 :(得分:3)
分割每一行后,您最终会得到<span> {{sellschoolvar}} </span>
IEnumerable<string[]>
所有类型的返回都是IEnumerable<string[]> transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));
System.String
所以将string FindDestination(State q0, Event s0) {
var transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));
var newq = from t in transitions
where t[0] == q0.Name && t[1] == s0.Name
select t[2];
return newq.FirstOrDefault();
}
传递给修改后的方法
IEnumerable<string[]>
答案 1 :(得分:1)
当ReadAllLines返回时,string[]
IEnumerable<string>
应该是有效匹配。