T
timor.super
Hi group,
imagine I want to find number of values of a word in a string ...
Look at my code :
List<string> thingsToFind = new List<string>(new string[]
{"error", "values"});
MyClass myClass = new MyClass(thingsToFind, data);
foreach (KeyValuePair<int, string> aValue in
myClass.GetValues())
{ // do something
}
.....
class MyClass
{
private readonly List<string> _list;
private readonly string _data;
public MyClass(List<string> listOfThingToSeach, string
data)
{
_list = listOfThingToSeach;
_data = data;
}
public IEnumerable<KeyValuePair<int, string>> GetValues()
{
foreach (string someThingToFind in _list)
{
string savData = _data;
int cpt = 0;
int pos = savData.IndexOf(someThingToFind,
StringComparison.InvariantCultureIgnoreCase);
while (savData.Length > 0 && pos >= 0)
{
cpt++;
savData = savData.Substring(pos +
someThingToFind.Length);
pos = savData.IndexOf(someThingToFind,
StringComparison.InvariantCultureIgnoreCase);
}
yield return new KeyValuePair<int, string>(cpt,
someThingToFind);
}
}
}
the GetValues function use an yield return to construct an IEnumerable
If I do :
List<string> thingsToFind = new List<string>(new string[]
{"error", "values"});
MyClass myClass = new MyClass(thingsToFind, data);
foreach (KeyValuePair<int, string> aValue in
myClass.GetValues())
{ // do something
}
foreach (KeyValuePair<int, string> aValue in
myClass.GetValues())
{ // 2 TIMES
}
then, I will parse the string data 2 times, and I need only one
time ...
so I would like to optimize my GetValues function by constructing a
List<> (for example, but maybe something else) during the parsing and
if the function is called a 2nd times, I return the list instead of
doing the parsing again ...
Something like this
public IEnumerable<KeyValuePair<int, string>> GetValues()
{
if my list is nothing
{
instanciate my list
do the parsing and create a new keyvaluepair
add the keyvaluepair to my list
yield return the keyvaluepair
}
else
{
return my list
}
}
but ... of course, I only can yield return, not return. Is there a way
to do what I want ?
Thanks for your answer
S.
imagine I want to find number of values of a word in a string ...
Look at my code :
List<string> thingsToFind = new List<string>(new string[]
{"error", "values"});
MyClass myClass = new MyClass(thingsToFind, data);
foreach (KeyValuePair<int, string> aValue in
myClass.GetValues())
{ // do something
}
.....
class MyClass
{
private readonly List<string> _list;
private readonly string _data;
public MyClass(List<string> listOfThingToSeach, string
data)
{
_list = listOfThingToSeach;
_data = data;
}
public IEnumerable<KeyValuePair<int, string>> GetValues()
{
foreach (string someThingToFind in _list)
{
string savData = _data;
int cpt = 0;
int pos = savData.IndexOf(someThingToFind,
StringComparison.InvariantCultureIgnoreCase);
while (savData.Length > 0 && pos >= 0)
{
cpt++;
savData = savData.Substring(pos +
someThingToFind.Length);
pos = savData.IndexOf(someThingToFind,
StringComparison.InvariantCultureIgnoreCase);
}
yield return new KeyValuePair<int, string>(cpt,
someThingToFind);
}
}
}
the GetValues function use an yield return to construct an IEnumerable
If I do :
List<string> thingsToFind = new List<string>(new string[]
{"error", "values"});
MyClass myClass = new MyClass(thingsToFind, data);
foreach (KeyValuePair<int, string> aValue in
myClass.GetValues())
{ // do something
}
foreach (KeyValuePair<int, string> aValue in
myClass.GetValues())
{ // 2 TIMES
}
then, I will parse the string data 2 times, and I need only one
time ...
so I would like to optimize my GetValues function by constructing a
List<> (for example, but maybe something else) during the parsing and
if the function is called a 2nd times, I return the list instead of
doing the parsing again ...
Something like this
public IEnumerable<KeyValuePair<int, string>> GetValues()
{
if my list is nothing
{
instanciate my list
do the parsing and create a new keyvaluepair
add the keyvaluepair to my list
yield return the keyvaluepair
}
else
{
return my list
}
}
but ... of course, I only can yield return, not return. Is there a way
to do what I want ?
Thanks for your answer
S.