小编Tom*_*lak的帖子

将平台解析成树的最有效/优雅的方法是什么?

假设您有一个存储有序树层次结构的平面表:

Id   Name         ParentId   Order
 1   'Node 1'            0      10
 2   'Node 1.1'          1      10
 3   'Node 2'            0      20
 4   'Node 1.1.1'        2      10
 5   'Node 2.1'          3      10
 6   'Node 1.2'          1      20
Run Code Online (Sandbox Code Playgroud)

这是我们所拥有的图表[id] Name.根节点0是虚构的.

                       [0] ROOT
                          /    \ 
              [1] Node 1          [3] Node 2
              /       \                   \
    [2] Node 1.1     [6] Node 1.2      [5] Node 2.1
          /          
 [4] Node 1.1.1

您将使用什么简约方法将其输出为HTML(或文本,就此而言)作为正确排序,正确缩进的树?

进一步假设你只有基本的数据结构(数组和散列图),没有带有父/子引用的花哨对象,没有ORM,没有框架,只有你的双手.该表表示为结果集,可以随机访问.

伪代码或普通英语是可以的,这纯粹是一个概念性的问题.

额外问题:在RDBMS中存储这样的树结构是否有根本更好的方法?


编辑和补充

回答一个评论者(Mark Bessey的)问题:根节点不是必需的,因为它永远不会被显示.ParentId = 0是表示"这些是顶级"的惯例.Order列定义了如何对具有相同父节点的节点进行排序.

我所谈到的"结果集"可以被描绘成一组哈希图(保留在该术语中).因为我的例子意味着已经存在.有些答案会加倍努力并首先构建它,但那没关系.

树可以任意深.每个节点可以有N个子节点.不过,我并没有考虑到"数百万条目".

不要将我选择的节点命名('Node 1.1.1')误认为是依赖的东西.节点同样可以称为"Frank"或"Bob",不暗示命名结构,这只是为了使其可读. …

sql algorithm tree recursion hierarchical-data

508
推荐指数
8
解决办法
11万
查看次数

固定页眉与页内锚点重叠

如果我在HTML页面中有一个非滚动标题,则固定在顶部,具有已定义的高度:

有没有办法使用URL锚点(#fragment部分)让浏览器滚动到页面中的某个点,但是在没有JavaScript帮助的情况下仍然尊重固定元素的高度?

http://foo.com/#bar
Run Code Online (Sandbox Code Playgroud)
WRONG (but the common behavior):         CORRECT:
+---------------------------------+      +---------------------------------+
| BAR///////////////////// header |      | //////////////////////// header |
+---------------------------------+      +---------------------------------+
| Here is the rest of the Text    |      | BAR                             |
| ...                             |      |                                 |
| ...                             |      | Here is the rest of the Text    |
| ...                             |      | ...                             |
+---------------------------------+      +---------------------------------+

html url anchor fragment

305
推荐指数
19
解决办法
16万
查看次数

Visual Basic 6.0和VBA之间的区别

两者有什么区别.我一直认为VBA是VB的某种"残缺"版本,但是当有一天朋友问我时,我不知道实际的差异是什么.

另外,当您使用Excel时,是VB还是VBA?

vb6 vba

203
推荐指数
7
解决办法
17万
查看次数

在VIM中打开缓冲区作为垂直拆分

如果您正在VIM中编辑文件,然后需要打开现有缓冲区(例如,从缓冲区列表中)::buffers如何在垂直拆分中打开它?

我知道你已经可以通过正常分割打开它,如:

:sbuffer N
Run Code Online (Sandbox Code Playgroud)

Wehere N是您想要的缓冲区编号,但是,上面打开N缓冲区水平而不是垂直.

我也知道你可以在打开后更改窗口位置,并像这样进行垂直分割:

Ctrl-W H
Ctrl-W L
Run Code Online (Sandbox Code Playgroud)

这会将窗口垂直分割为右侧或左侧.

在我看来,如果有一个sbuffer应该有一个,vsbuffer但不存在(不是我知道)

此外,请注意我不是在寻找一个插件来解决这个问题.我知道有很多插件可以让你这样做.

我相信我可能会遗漏已经存在的东西.

编辑:在最好的合作精神,我已经创建了一个简单的功能与映射如果其他人偶然发现这个问题,并且不想安装插件:

功能:

" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
    execute "vert belowright sb" a:buffer 
endfunction
Run Code Online (Sandbox Code Playgroud)

制图:

" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)
Run Code Online (Sandbox Code Playgroud)

这完成了在右侧拆分中打开缓冲区的任务,因此对于缓冲区1,您可以将其称为:

:Vbuffer 1
Run Code Online (Sandbox Code Playgroud)

vim

167
推荐指数
4
解决办法
5万
查看次数

jQuery循环来自AJAX Success的JSON结果?

关于jQuery AJAX成功回调,我想循环遍历对象的结果.这是响应在Firebug中的显示方式的示例.

[
 {"TEST1":45,"TEST2":23,"TEST3":"DATA1"},
 {"TEST1":46,"TEST2":24,"TEST3":"DATA2"},
 {"TEST1":47,"TEST2":25,"TEST3":"DATA3"}
]
Run Code Online (Sandbox Code Playgroud)

如何循环结果以便我可以访问每个元素?我尝试了类似下面的东西,但这似乎不起作用.

jQuery.each(data, function(index, itemData) {
  // itemData.TEST1
  // itemData.TEST2
  // itemData.TEST3
});
Run Code Online (Sandbox Code Playgroud)

ajax jquery json

146
推荐指数
6
解决办法
39万
查看次数

XSL中"call-template"和"apply-templates"之间有什么区别?

我是XSLT的新手,所以我对这两个标签感到有点困惑,

<xsl:apply-templates name="nodes">
Run Code Online (Sandbox Code Playgroud)

<xsl:call-template select="nodes"> 
Run Code Online (Sandbox Code Playgroud)

那么你能列出它们之间的区别吗?

xslt apply-templates

116
推荐指数
3
解决办法
10万
查看次数

在Rails中 - 有一个rails方法将换行符转换为<br>吗?

是否有一种Railsy方式将\n转换为<br>

目前,我这样做:

mystring.gsub(/\n/, '<br>')
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

111
推荐指数
4
解决办法
5万
查看次数

有效地替换字符串中的所有重音字符?

对于一个穷人在客户端实现近似校正正确的排序,我需要一个JavaScript函数来在字符串中进行有效的单个字符替换.

这就是我的意思(请注意,这适用于德语文本,其他语言的排序方式不同):

native sorting gets it wrong: a b c o u z ä ö ü
collation-correct would be:   a ä b c o ö u ü z

基本上,我需要将所有出现的给定字符串的"ä"替换为"a"(依此类推).这样,本机排序的结果将非常接近用户期望的结果(或数据库将返回的内容).

其他语言有这样的设施:Python提供str.translate(),在Perl中tr/…/…/,XPath有一个函数translate(),ColdFusion有ReplaceList().但是JavaScript呢?

这就是我现在所拥有的.

// s would be a rather short string (something like 
// 200 characters at max, most of the time much less)
function makeSortString(s) {
  var translate = {
    "ä": "a", "ö": "o", "ü": …
Run Code Online (Sandbox Code Playgroud)

javascript sorting string collation

108
推荐指数
12
解决办法
11万
查看次数

这是在SQL中进行布尔测试的正确方法吗?

假设active是一个"boolean field"(小int,0或1)

# Find all active users
select * from users where active 

# Find all inactive users
select * from users where NOT active 
Run Code Online (Sandbox Code Playgroud)

换句话说,"NOT"运算符可以直接应用于布尔字段吗?

sql boolean-expression

69
推荐指数
4
解决办法
16万
查看次数

如何从XSLT中的子节点读取父节点的属性

只想知道如何从XSLT中的子节点读取父节点的属性.码:

<A>
  <b attr1="xx">
    <c>
    </c>
  </b>
</A>
Run Code Online (Sandbox Code Playgroud)

XSLT:

<xsl:template match="c">
  <xsl:value-of select="attribute of b node">
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

xslt xpath

45
推荐指数
1
解决办法
6万
查看次数