知识大全 不定循环的字符串格式化
Posted 知
篇首语:要让事情改变,先改变自己;要让事情变得更好,先让自己变得更强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 不定循环的字符串格式化相关的知识,希望对你有一定的参考价值。
最近做的项目(自己练练手的那种)遇到了一个很有趣的问题 比如这样一个字符串 field /field /field 当然这里的field个数是不确定的 但是每一个field都知道其范围 要实现的功能就是把所有的url计算出来
如果field的个数确定 你大可放心地用for循环 不断地嵌套就可以实现 但是这里是不确定的 我想到的方案是使用Stack 用Stack来模拟嵌套的for循环
首先为field建个模型 说白了就是写了class表示它
view sourceprint? public class RangeItem
private int position = ;
/// <summary>
/// 对应的field位置
/// </summary>
public int Position
get return position;
set position = value;
private int rangeMin = ;
/// <summary>
/// 范围最小值
/// </summary>
public int RangeMin
get return rangeMin;
set rangeMin = value;
private int rangeMax = ;
/// <summary>
/// 范围最大值
/// </summary>
public int RangeMax
get return rangeMax;
set rangeMax = value;
private int currentIndex = ;
/// <summary>
/// 在Range中的位置 这个属性用于在循环中保存当前的处理序号 因为我们在用Stack模拟嵌套的for循环
/// </summary>
public int CurrentIndex
get return currentIndex == ? rangeMin : currentIndex;
set currentIndex = value;
然后呢再封装一下 把所有的RangeItem集中管理
view sourceprint? public class RangeItemManager
private static List<RangeItem> rangeItems = new List<RangeItem>();
/// <summary>
/// 所有的RangeItem
/// </summary>
public static List<RangeItem> Items
get return RangeItemManager rangeItems;
set RangeItemManager rangeItems = value;
核心的代码如下
view sourceprint? if (RangeItemManager Items Count == )
return null;
RangeItemManager Items Sort(Compare);
RangeItem firstItem = RangeItemManager Items[ ];
//如果只有一个field 则简单地通过一个for处理
if (RangeItemManager Items Count == )
for (int i = firstItem RangeMin; i <= firstItem RangeMax; i++)
Action(i);
else
//循环最外层的 对应field
for (int i = firstItem RangeMin; i <= firstItem RangeMax; i++)
stack = new Stack<int>();
//把最外层的那个值入栈
stack Push(i);
//循环剩余的RangeItem
ProcessInnerLoop( );
public static int Compare(RangeItem x RangeItem y)
return x Position > y Position ? : ;
private static void ProcessInnerLoop(int current)
++current;
//如果是最里层(fieldmax) 则直接进行遍历
if (current == RangeItemManager Items Count )
RangeItem item = RangeItemManager Items[current];
for (int i = item RangeMin; i <= item RangeMax; i++)
//获取全部入栈的元素 这样算是完成了一次处理 可以产生了一个url
List<int> lst = stack ToList();
lst Reverse();
lst Add(i);
Action(lst);
else
RangeItem item = RangeItemManager Items[current];
for (int i = item CurrentIndex; i <= item RangeMax; i++)
//把当前值入栈
stack Push(i);
//处理下一个RangeItem
ProcessInnerLoop(current);
//修改当前RangeItem的CurrentIndex 下一次循环是从CurrentIndex开始的
item CurrentIndex = i + ;
if (item CurrentIndex >= item RangeMax)
item CurrentIndex = item RangeMin;
//把当前值出栈
stack Pop();
private static void Action(List<int> lst)
object[] objs = new object[lst Count];
for (int i = ; i < lst Count; i++)
objs[i] = (object)lst[i];
string url = String Format(UrlFormator objs);
//TargetUrls Urls是一个List<string>
TargetUrls Urls Add(url);
private static void Action(int i)
string url = String Format(UrlFormator i);
//TargetUrls Urls是一个List<string>
TargetUrls Urls Add(url);
cha138/Article/program/net/201311/11500
相关参考
GridView实现自定义时间货币等字符串格式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 效
Delphi把流中的字符串转换为UTF格式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本例效
知识大全 浅析Js(Jquery)中,字符串与JSON格式互相转换的示例
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
前一段仿泡泡网做了个论坛遇到了个文本符号转化成相应格式的问题自己试了几种方式搞了简单的格式转化类 网页格式转化为文本框格式 代码 publicstringEncode(stringstr)
知识大全 Oracle基本数据类型存储格式浅析(一)-字符类型
Oracle基本数据类型存储格式浅析(一)-字符类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一使用内建函数c 特点 不管其表现形式是怎样的( 例如"""""""""") 只要小数分割符是它就能转化成计算机能够识别的字符串形式而且都是计算机处理的时候是没有那些所谓的千位分隔符的(空
Java循环与字符串代码优化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在系统性能优化的时候
参数str 需判断的字符串fmt 时间格式化方式nls 语言 CREATEORREPLACEFUNCTIONisdate(strvarcharfmtvarchard
第一章:缩进格式 Tab是个字符于是缩进也是个字符有很多怪异的风格他们将缩进格式定义为个字符(设置为个字符!)的深度这就象试图将PI定义为一样让人难以接受 理由是:缩进的大小是为了清楚
escape是什么意思? escape采用ISOLatin字符集对指定的字符串进行编码所有的空格符标点符号特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集