【问题标题】:Concatenate variable-length-strings as table将可变长度字符串连接为表格
【发布时间】:2012-04-10 13:16:02
【问题描述】:

我正在从 SQL 获取数据数组,然后将它们连接为字符串以进行显示。函数如下所示:

function FetchTopStats( Conn, iLimit )
  local sToReturn = "\tS.No. \t UserName \t Score\n\t"
  SQLQuery = assert( Conn:execute( string.format( [[SELECT username, totalcount FROM chatstat ORDER BY totalcount DESC LIMIT %d]], iLimit ) ) )
  DataArray = SQLQuery:fetch ({}, "a")
  i = 1
  while DataArray do
    sToReturn = sToReturn..tostring( i ).."\t"..DataArray.username.." \t "..DataArray.totalcount.."\n\t"
    DataArray = SQLQuery:fetch ({}, "a")
    i = i + 1
  end
  return sToReturn
end

这给了我这样的输出:

    S.No.    UserName    Score
    1   aim      6641
    2   time     5021
    3   Shepard      4977

等等。我正在考虑使用string.format 函数,显示如下:

    S.No.    UserName    Score
    1       aim          6641
    2       time         5021
    3       Shepard      4977

但是,我完全不知道如何拥有这个。我想到的唯一选择是检查用户名的字符串长度,然后相应地应用\t。那个,我最后想用。

【问题讨论】:

    标签: string lua concatenation ptokax


    【解决方案1】:

    好吧,您需要找出用户名的最大长度,从而使算法通过 2 次,或者将其限制为任意(但合理)的大小,并无条件地剪掉太长字符串的尾部。获得列宽后,您可以使用左对齐或右对齐格式字符串:

    > print(string.format("|%-10d|%-20s|%10d|", 1, "Shepard", 9000))
    |1         |Shepard             |      9000|
    

    此外,对于大型表,请考虑使用table.concat 来构建最终输出:它比重复附加字符串要快得多(请参阅Chapter 11.6 of PIL 以获得解释)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      相关资源
      最近更新 更多